<?php

namespace Core\init;

use Core\annotations\Bean;

/**
 * 装饰器 收集器
 * @Bean
 */
class DecorateCollector
{
    //收集器  key=>$func
    public $dSet = [];

    public function exec(\ReflectionMethod $method, $instance, $inputParams)
    {
        $key = get_class($instance) . "::" . $method->getName();
        //装饰器内 无 则原样返回
        if (!isset($this->dSet[$key])) {
            return $method->invokeArgs($instance, $inputParams);
        }
        //使用装饰器内函数 调用反射闭包执行
        $func = $this->dSet[$key];
        return $func($method->getClosure($instance))($inputParams);

    }

}
